#!/bin/bash

# 智能门禁系统服务启动脚本
# 使用方法: ./start_services.sh

# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color

# 获取脚本所在目录
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$SCRIPT_DIR"

# 日志文件路径
BACKEND_LOG="$PROJECT_ROOT/backend.log"
FRONTEND_LOG="$PROJECT_ROOT/frontend.log"

# PID文件路径
BACKEND_PID_FILE="$PROJECT_ROOT/backend.pid"
FRONTEND_PID_FILE="$PROJECT_ROOT/frontend.pid"

echo -e "${BLUE}======================================${NC}"
echo -e "${BLUE}   智能门禁系统服务启动脚本${NC}"
echo -e "${BLUE}======================================${NC}"

# 检查是否已有服务在运行
check_running_services() {
    if [ -f "$BACKEND_PID_FILE" ] && kill -0 $(cat "$BACKEND_PID_FILE") 2>/dev/null; then
        echo -e "${YELLOW}警告: 后端服务已在运行 (PID: $(cat $BACKEND_PID_FILE))${NC}"
        return 1
    fi
    
    if [ -f "$FRONTEND_PID_FILE" ] && kill -0 $(cat "$FRONTEND_PID_FILE") 2>/dev/null; then
        echo -e "${YELLOW}警告: 前端服务已在运行 (PID: $(cat $FRONTEND_PID_FILE))${NC}"
        return 1
    fi
    
    return 0
}

# 清理旧的日志文件
cleanup_logs() {
    echo -e "${BLUE}清理旧日志文件...${NC}"
    > "$BACKEND_LOG"
    > "$FRONTEND_LOG"
}

# 启动后端服务
start_backend() {
    echo -e "${GREEN}启动 Django 后端服务...${NC}"
    
    cd "$PROJECT_ROOT/backend"
    
    # 检查虚拟环境
    if [ -d "venv" ]; then
        echo -e "${BLUE}激活 Python 虚拟环境...${NC}"
        source venv/bin/activate
    fi
    
    # 启动 Django 服务器 (后台运行)
    echo -e "${BLUE}Django 服务将在 0.0.0.0:8000 启动...${NC}"
    nohup python manage.py runserver 0.0.0.0:8000 > "$BACKEND_LOG" 2>&1 &
    BACKEND_PID=$!
    
    # 保存 PID
    echo $BACKEND_PID > "$BACKEND_PID_FILE"
    
    # 等待服务启动
    sleep 3
    
    if kill -0 $BACKEND_PID 2>/dev/null; then
        echo -e "${GREEN}✓ 后端服务启动成功 (PID: $BACKEND_PID)${NC}"
        echo -e "${BLUE}  访问地址: http://172.31.133.168:8000${NC}"
        echo -e "${BLUE}  日志文件: $BACKEND_LOG${NC}"
    else
        echo -e "${RED}✗ 后端服务启动失败${NC}"
        echo -e "${RED}请查看日志文件: $BACKEND_LOG${NC}"
        return 1
    fi
}

# 启动前端服务
start_frontend() {
    echo -e "${GREEN}启动 React 前端服务...${NC}"
    
    cd "$PROJECT_ROOT/frontend"
    
    # 启动 Vite 开发服务器 (后台运行)
    echo -e "${BLUE}React 前端将在 0.0.0.0:5173 启动...${NC}"
    nohup npm run dev > "$FRONTEND_LOG" 2>&1 &
    FRONTEND_PID=$!
    
    # 保存 PID
    echo $FRONTEND_PID > "$FRONTEND_PID_FILE"
    
    # 等待服务启动
    sleep 5
    
    if kill -0 $FRONTEND_PID 2>/dev/null; then
        echo -e "${GREEN}✓ 前端服务启动成功 (PID: $FRONTEND_PID)${NC}"
        echo -e "${BLUE}  访问地址: http://172.31.133.168:5173${NC}"
        echo -e "${BLUE}  日志文件: $FRONTEND_LOG${NC}"
    else
        echo -e "${RED}✗ 前端服务启动失败${NC}"
        echo -e "${RED}请查看日志文件: $FRONTEND_LOG${NC}"
        return 1
    fi
}

# 显示服务状态
show_status() {
    echo -e "${BLUE}======================================${NC}"
    echo -e "${GREEN}所有服务启动完成！${NC}"
    echo -e "${BLUE}======================================${NC}"
    echo -e "${BLUE}服务状态:${NC}"
    
    if [ -f "$BACKEND_PID_FILE" ] && kill -0 $(cat "$BACKEND_PID_FILE") 2>/dev/null; then
        echo -e "${GREEN}  ✓ 后端服务 (Django): 运行中 (PID: $(cat $BACKEND_PID_FILE))${NC}"
        echo -e "    地址: http://172.31.133.168:8000"
    fi
    
    if [ -f "$FRONTEND_PID_FILE" ] && kill -0 $(cat "$FRONTEND_PID_FILE") 2>/dev/null; then
        echo -e "${GREEN}  ✓ 前端服务 (React): 运行中 (PID: $(cat $FRONTEND_PID_FILE))${NC}"
        echo -e "    地址: http://172.31.133.168:5173"
    fi
    
    echo -e "${BLUE}======================================${NC}"
    echo -e "${YELLOW}日志监控:${NC}"
    echo -e "  后端日志: tail -f $BACKEND_LOG"
    echo -e "  前端日志: tail -f $FRONTEND_LOG"
    echo -e ""
    echo -e "${YELLOW}停止服务:${NC}"
    echo -e "  ./stop_services.sh"
    echo -e ""
    echo -e "${YELLOW}实时查看所有日志:${NC}"
    echo -e "  ./watch_logs.sh"
}

# 主执行流程
main() {
    # 检查运行中的服务
    if ! check_running_services; then
        echo -e "${RED}请先停止现有服务，或使用 ./stop_services.sh${NC}"
        exit 1
    fi
    
    # 清理日志
    cleanup_logs
    
    # 启动后端
    if ! start_backend; then
        echo -e "${RED}后端启动失败，停止启动流程${NC}"
        exit 1
    fi
    
    # 启动前端
    if ! start_frontend; then
        echo -e "${RED}前端启动失败，但后端仍在运行${NC}"
        echo -e "${YELLOW}可以使用 ./stop_services.sh 停止所有服务${NC}"
        exit 1
    fi
    
    # 显示状态
    show_status
}

# 执行主函数
main "$@"